import java.util.ArrayList;

/**
 * @author LKQ
 * @date 2021/11/27 16:52
 * @description 要求两次变化最大的差值，且每次只能更换一位数，那么
 *  * 第一次：更换最高位的那个数为9，如果已经是，那么更换次高位的，以此类推
 *  * 第二次：更换最高位为1，如果已经是1，那么更换次高位为0，注意只能寻找>=2的数跟换，0不需要，1交换为0需要全部交换.
 */
public class MySolution {
    public static void main(String[] args) {
        System.out.println(maxDiff(1101057));
    }
    public static int maxDiff(int num) {
        // 利用动态数组将正整数读取到数组中
        ArrayList<Integer> list= new ArrayList<>();
        while (num>=1) {
            list.add(num % 10);
            num /= 10;
        }
        int n = list.size();
        int[] ans = new int[n];
        for (int i = 0; i < n; i++) {
            ans[n-i-1] = list.get(i);
        }
        int[] copyAns = ans.clone();
        return countMax(ans) - countMin(copyAns);
    }

    public static int countMax(int[] num) {
        int temp = -1, max = 0,  n = num.length;
        // 是否更换了一位数字
        boolean isChange = false;
        for (int i = 0; i < n; i++) {
            if (isChange && i > n-1) {
                // 更换了并且遍历了所有的数字
                break;
            }
            if (num[i]!=9 && !isChange) {
                temp = num[i];
                num[i] = 9;
                isChange = true;
            }
            if (num[i] == temp) {
                num[i] = 9;
            }
        }
        for (int i =0; i<n; i++) {
            max += num[i] * (int) Math.pow(10, n-i-1);
        }
        return max;
    }

    public static int countMin(int[] num) {
        int temp = -1, min = 0,  n = num.length;
        boolean isChange = false, isFirst = false;
        for (int i = 0; i < n; i++) {
            if (isChange && i > n-1) {
                break;
            }
            if (num[0] != 1) {
                temp = num[0];
                num[0] = 1;
                isChange = true;
                isFirst = true;
            }else if (num[i+1 >= n ? n-1 : i+1] >= 2 && !isChange) {
                // num[0]为1，如果num[i]为0，则不用更改；
                // 如果num[i]为1，根据规则所有的1都需要替换为0，不符合，所以实际上只替换>=2的数
                temp = num[i+1];
                num[i+1] = 0;
                isChange = true;
            }
            if (num[i] == temp ) {
                if (num[0]==1 && isFirst) {
                    num[i] = 1;
                }else {
                    num[i] = 0;
                }
            }
        }
        for (int i =0; i<n; i++) {
            min += num[i] * (int) Math.pow(10, n-i-1);
        }
        return min;
    }
}
